انتقل إلى المحتوى الرئيسي

التحكم المباشر عبر MQTT

تلميح

التحكم المباشر عبر MQTT مخصص للتحكم المباشر. لإرسال الجداول مسبقًا، راجع التحكم المجدول عبر MQTT بدلاً من ذلك.

ستساعدك هذه الدليل في تكوين MQTT على SmartgridOne Controller للتحكم عن بعد في ومراقبة تركيبات البطاريات والألواح الشمسية.

ما تحتاجه

  1. SmartgridOne Controller مع اتصال بالإنترنت.
  2. بيانات اعتماد MQTT: يمكن طلب ذلك عن طريق إرسال بريد إلكتروني إلى support@eniris.be.
  3. بيئة تطوير Python (أو أي عميل MQTT آخر). يستخدم هذا الدليل مثالًا أساسيًا مكتوبًا بلغة Python ليبدأ بك مع MQTT وإرسال الأوامر. نوصي باستخدام Python لسهولة الاستخدام، ولكن أي عميل MQTT آخر مدعوم.

معلومات إضافية

MQTT هو بروتوكول تواصل سريع عبر الإنترنت. إنه نظام رسائل نشر/اشتراك، مما يسمح بإجراء اتصال مباشر بين جهازك وSmartgridOne Controller. يتم تصنيف أصولك إلى مجموعات من الطاقة الشمسية والبطارية وكهرباء المركبات وHVAC.

التكوين الأول (نقطة البداية للمستخدمين الجدد)

لدي SmartgridOne Controller أرغب في إعداده للتحكم عن بعد عبر MQTT.

1. تحقق من شبكتك

تأكد من أن شبكتك تسمح بحركة بيانات mqtt عبر المنفذ 1883. يمكنك القيام بذلك باستخدام الأمر:

nc -zv mqtt.eniris.be 1883

عندما لا يتوفر هذا الأمر، يمكنك بدلاً من ذلك تنزيل وتنفيذ هذا الرمز Python.

عندما تكون في شك، استشر مهندس الشبكة الخاص بك أو استخدم مؤقتًا نقطة الاتصال 4G/5G لهاتفك عند حدوث أخطاء في الاتصال.

ملاحظة

عندما لا يمكن الوصول إلى المنفذ 1883 من شبكتك، نقدم نسخة احتياطية على المنفذ 80. يمكن تكوين ذلك في عميل MQTT الخاص بك في خطوة لاحقة من هذا الدليل.

2. إضافة الأجهزة الخاصة بك

قم بتسجيل الدخول إلى واجهة التكليف وتأكد من أن الأجهزة تم إضافتها إلى SmartgridOne Controller.

3. إضافة إشارة MQTT الخارجية

Image 1
Image 1
Image 1
Image 1

4. تفعيل إشارة MQTT عن بعد

يجب ترك حقل 'معرف VPP' فارغًا.

يخبرك مهلة آلية النسخ الاحتياطي SmartgridOne Controller بمدة انتظارها للأوامر الجديدة. عندما يتوقف SmartgridOne Controller عن تلقي الأوامر، فإنه يلتقط تلقائيًا الاستراتيجية الافتراضية بعد مرور هذه المهلة.

بعد ذلك، حدد جميع الأجهزة التي ترغب في تضمينها في التحكم عن بعد عبر MQTT.

Image 1
Image 1

5. تمت إضافة إشارة التحكم عن بعد

تم الآن تفعيل واجهة التحكم عن بعد عبر MQTT على SmartgridOne Controller.

نحن الآن مستعدون لإرسال بعض الأوامر الأساسية باستخدام مثال بسيط. تخبرك عمود الحالة إذا كانت هناك أي أوامر نشطة.

Image 1

نص برمجي تجريبي بلغة Python

نقطة بداية جيدة ستكون اختبار تكامل الجديد الخاص بك بمثال بسيط.

يقوم هذا الرمز التجريبي بعمل بسيط يتمثل في إرسال الأوامر التالية باستمرار:

  • البطارية: الشحن عند 5 كيلو وات
  • الطاقة الشمسية: تعيين الطاقة إلى 0 كيلو وات

يستجيب SmartgridOne Controller باستمرار برسالة 'تغذية راجعة' تحتوي على قيم الطاقة الخاصة بالشبكة والأصول الملاحظة. تتضمن هذه الميزة أيضًا في هذا المثال.

يرجى تحميل الملف أدناه في بيئة Python المفضلة لديك. املأ رقمك التسلسلي وبيانات اعتماد MQTT وقم بتنفيذ البرنامج النصي:

عندما يكون ما سبق ناجحًا، يمكنك الاستمرار في إرسال أنواع أخرى من الأوامر. يتم وصف جميع الأوامر في وثائق التحكم عن بعد عبر MQTT الخاصة بنا.

وثائق MQTT لإرسال الأوامر

تتضمن هذه القسم تفاصيل تنسيق رسائل MQTT ومتطلبات الحمولة للتحكم عن بعد في سياسات الطاقة على الأجهزة ضمن شبكة SmartgridOne Controller.

موضوع MQTT

يتم تنظيم موضوع MQTT المستخدم لإرسال الأوامر على النحو التالي:

standard1/rp_one_s/remoteControlMetrics/'controller SN'

حيث يجب استبدال 'معرف الجهاز SN' برقم المسلسل الفعلي لـ SmartgridOne Controller الذي تنوي التحكم فيه.

هيكل الحمولة لـ MQTT

ترسل الأوامر كحمولات JSON. تم تصميم هيكل الحمولة لتحديد سياسات إدارة الطاقة المختلفة والنقاط الضبط لمكونات نظام الشبكة الذكية المختلفة. إليك الخطوط العريضة للحمولة مع أوصاف الحقول التفصيلية:

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"<Component Policy>": "<Policy Type>",
"<Component Power Setpoint>": <Setpoint in watts>
}
}

وصف الحقول

تلميح

يمكن التحكم في أنواع أجهزة متعددة (مثل البطاريات + الطاقة الشمسية) في نفس الوقت.

  • extraTags (كائن):
    • nodeId (سلسلة): معرف فريد للنود داخل شبكة SmartgridOne Controller. هذا يعادل رقم التسلسل الخاص بك، متبوعًا بـ '_site_0' لمعظم أجهزة SmartgridOne Controller.
  • time (عدد صحيح): الطابع الزمني لUnix بالثواني يشير إلى الوقت الذي تم فيه إرسال الرسالة.
  • fields (كائن):
    • <Component>_policy (سلسلة): نوع السياسة للمكون. هذا اختياري وإذا لم يتم تحديده، ستعود النظام إلى الإعداد الافتراضي لـ SmartgridOne Controller.
    • <Component>_power_setpoint_w (عائم): نقطة القدرة المرغوبة بالواط للمكون. هذا اختياري فقط وذو صلة إذا تم تحديد سياسة مقابلة.

المكونات والسياسات

معلومات

سيتم دمج الأصول من نفس النوع (مثل بطاريتين) كمكون واحد. على سبيل المثال، عند تركيب بطاريتين سعة 5 كيلو وات ساعة، سيتم اعتبارها بطارية واحدة سعة 10 كيلو وات ساعة.

يمكن أن يتضمن كل مكون في كائن fields سياسة ونقطة ضبط للطاقة. المكونات التالية يمكن التحكم فيها:

  • solar_policy وsolar_power_setpoint_w:

    • يتحكم في سياسة توليد الطاقة الشمسية ونقطة الضبط. السياسات المدعومة:
      • نقطة ضبط السياسة: تعيين الحد الأقصى للطاقة المنتجة من جميع التركيبات الشمسية المتصلة معًا. يجب تعيين حقل solar_power_setpoint_w إلى حد إنتاج الطاقة بالواط.
      • سياسة قيود الإدخال: إنتاج بأقصى طاقة، مع احترام حدود الشبكة الحالية.
      • سياسة التكلفة: تمكين تقليل تكلفة الأسعار ليوم كامل (سوق EPEX Spot) على الإنتاج الشمسي. عند حدوث أسعار حقن سلبية، نقوم بتقليص الإنتاج للاستهلاك الذاتي. عندما تكون كل من أسعار السحب والحقن سلبية، نقوم بإيقاف جميع التركيبات الشمسية. يتم تجاهل حقل solar_power_setpoint_w.
      • سياسة الإيقاف: تعطيل جميع التفاعلات لجميع الأصول الشمسية. تحذير: الحدود لا يتم حراستها في هذا الوضع. يتم تجاهل حقل solar_power_setpoint_w.
  • storage_policy وstorage_power_setpoint_w:

  • يتحكم في سياسة نظام تخزين الطاقة ومعدل الشحن أو التفريغ.

    • نقطة ضبط السياسة: ضبط إجمالي طاقة الشحن (نقطة ضبط إيجابية) أو طاقة التفريغ (نقطة ضبط سلبية) لمجموعة البطاريات. عند توصيل عدة بطاريات، يتم تقسيم نقطة الضبط حسب الطاقة المتاحة للشحن/التفريغ لتخفيف الضغط بشكل متساوٍ على البطاريات. يتم تعيين الحقل storage_power_setpoint_w إلى طاقة البطارية المطلوبة.
    • تكلفة السياسة: يتيح تحسين تكلفة السعر الإضافي (سوق EPEX Spot) على البطاريات، عن طريق شحنها في الساعات الرخيصة واستخدام الطاقة في الساعات الغالية. يتم إهمال الحقل storage_power_setpoint_w.
    • سياسة الاستهلاك الذاتي: يتيح خوارزمية بسيطة للاستهلاك الذاتي على البطاريات. يتم تخزين الإنتاج الزائد من الطاقة الشمسية في البطارية خلال النهار، وعندما تغيب الشمس، تُؤخذ الطاقة من البطارية. يتم إهمال الحقل storage_power_setpoint_w.
    • سياسة الإيقاف: تعطيل جميع التفاعلات لجميع أصول البطاريات. تحذير: الحدود لا يتم حمايتها في هذا الوضع. يتم إهمال الحقل storage_power_setpoint_w.
  • heat_pump_policy:

    • يقوم بتبديل أنظمة الضخ الحراري (heatpump) التشغيل/الإيقاف. سيتم دائمًا احترام أوقات التشغيل الدنيا والقصوى.
    • تكلفة السياسة: يتيح تحسين تكلفة السعر الإضافي (سوق EPEX Spot) على المضخات الحرارية. تحدد خوارزمية التسعير الديناميكي المحلية أفضل فترات التشغيل.
    • سياسة الاستهلاك الذاتي: يقوم بتشغيل المضخات الحرارية إذا تم إنتاج فائض من الطاقة الشمسية.
    • سياسة الإيقاف: إيقاف المضخات الحرارية.
    • سياسة التشغيل: تشغيل المضخات الحرارية.
  • switched_load_policy:

    • يقوم بتبديل الأنظمة التي تتحكم بها المرحلات (relay) التشغيل/الإيقاف. قد تكون هذه المرحلات مدمجة أو متصلة بالشبكة.
    • تكلفة السياسة: يتيح تحسين تكلفة السعر الإضافي (سوق EPEX Spot) على المرحلات.
    • سياسة الاستهلاك الذاتي: يقوم بتشغيل المرحل إذا تم إنتاج فائض من الطاقة الشمسية.
    • سياسة الإيقاف
    • سياسة التشغيل
  • variable_power_load_policy و variable_power_load_power_setpoint_w:

    • يدير سياسة استهلاك الطاقة لمركبات الطاقة الكهربائية ونقطة الضبط.
    • نقطة ضبط السياسة: ضبط إجمالي طاقة الشحن لمجموعة المركبات الكهربائية. يتم تعيين الحقل variable_power_load_power_setpoint_w إلى طاقة الشحن المطلوبة.
    • تكلفة السياسة: يتيح تحسين تكلفة السعر الإضافي (سوق EPEX Spot) على البطاريات، من خلال شحنها في الساعات الرخيصة. يتم إهمال الحقل variable_power_load_power_setpoint_w.
    • سياسة الاستهلاك الذاتي: يتيح الشحن إذا تم إنتاج فائض من الطاقة الشمسية. يتم إهمال الحقل variable_power_load_power_setpoint_w.
    • سياسة الإيقاف: تعطيل جميع التفاعلات لجميع أصول المركبات الكهربائية. يتم إهمال الحقل variable_power_load_power_setpoint_w.
  • site_policy و site_power_setpoint_w:

    • يدير حدود تصدير الموقع.
    • سياسة التصدير: ضبط حد التصدير للموقع. يتم تعيين الحقل site_power_setpoint_w إلى حد التصدير.
    • سياسة افتراضية: يعيد تحديد حد الموقع إلى طاقة التصدير الافتراضية، كما هو محدد في تكوين المتحكم.

التحكم في الأجهزة

يمكن أيضًا التحكم في أجهزة محددة، بدلاً من مجموعات من الأجهزة بناءً على أنواعها. الرسالة هيكلها مطابق:

  • nodeId_policy و nodeId_power_setpoint_w

عند إرسال أمرين لنفس الأصل (مثل أمر خاص بجهاز ما إلى العاكس الشمسية، وأمر لجميع الأجهزة الشمسية)، ستفضل طريقة التحكم الخاصة بالجهاز على التحكم وفق نوع الجهاز.

سلوك الاحتياطي

بالنسبة لكل مكون، إذا لم يتم تحديد _policy و _power_setpoint_w، سيستخدم النظام تلقائيًا سياسة الاحتياطي المكونة في SmartgridOne Controller. يضمن ذلك أن كل جهاز أو مجموعة أجهزة تعمل بأمان وتستمر في العمل حتى إذا لم يتم توفير تعليمات محددة.

إذا لم يتم إرسال أي أمر على الإطلاق، بعد 60 ثانية (أو بعد فترة انتهاء التكوين)، سيتم إعادة تفعيل السياسات الافتراضية للأصول.

مثال على الحمولة

فيما يلي مثال على حمولة لضبط سياسات ونقاط ضبط مختلفة:

{
"extraTags": {
"nodeId": "OM12404080000000000_site_0"
},
"time": 1714652046,
"fields": {
"solar_policy": "setpoint",
"solar_power_setpoint_w": 5000,
"storage_policy": "setpoint",
"storage_power_setpoint_w": -5000
}
}

في هذا المثال، يتم ضبط الطاقة الشمسية لتوليد ما يصل إلى 5000 واط، ويتم ضبط نظام تخزين الطاقة إما على الشحن أو التفريغ بمعدل 5000 واط، اعتمادًا على إشارة قيمة نقطة الضبط. إذا تم حذف أي من solar_policy أو storage_policy، سيعود الجهاز المعني إلى الإعدادات الافتراضية التي تحددها SmartgridOne Controller.

وثيقة MQTT لتلقي التغذية الراجعة

توضح هذه section هيكل ومحتوى رسائل التغذية الراجعة المرسلة بواسطة SmartgridOne Controller عبر MQTT. يتم نشر هذه الرسائل إلى الموضوع standard1/outbound/remoteControlMetrics/feedback/<Controller SN> بعد معالجة أمر ما.

موضوع تغذية الراجعة MQTT

هيكل موضوع تغذية الراجعة MQTT هو كما يلي:

standard1/outbound/remoteControlMetrics/feedback/<Controller SN>

حيث <Controller SN> يجب استبداله برقم السريل الخاص بـ SmartgridOne Controller التي ترسل التغذية الراجعة.

هيكل حمولة تغذية الراجعة MQTT

تكون رسائل التغذية الراجعة بتنسيق حمولة JSON. توفر هذه الحمولة تعليقات مفصلة حول حالة النظام بعد تطبيق أوامر نقاط الضبط، مع الأخذ في الاعتبار حدود الشبكة/الجهاز. فيما يلي هيكل حمولة التغذية الراجعة مع أوصاف لحقولها:

{
"time": "<Unix Timestamp>",
"data": {
"state": {
"grid": {
"active_power_W": <Grid Active Power in Watts>,
"today_imported_energy_Wh": <Grid Imported Energy in Watt-hours>,
"today_exported_energy_Wh": <Grid Exported Energy in Watt-hours>,
"import_limit_W": <Grid Import Limit in Watts>,
"export_limit_W": <Grid Export Limit in Watts>,
},
"vpp_id": "<Virtual Power Plant Identifier>",
"storage": {
"energy_stored_Wh": <Energy Stored in Watt-hours>,
"energy_capacity_Wh": <Total Energy Capacity in Watt-hours>,
"mean_soc_perc": <Mean State of Charge Percentage>,
"active_power_W": <Active Power in Watts>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"executed_policy": <Policy Executed by the Controller>,
"max_charge_power_W": <Maximum Charge Power in Watts>,
"max_discharge_power_W": <Maximum Discharge Power in Watts>,
"today_charged_Wh": <Energy Charged on the Current Today in Watt-hours>,
"today_discharged_Wh": <Energy Discharged on the Current Today in Watt-hours>,
"nr_devices": <Number of Controlled Storage Devices Installed>
},
"solar": {
"active_power_W": <Solar Active Power in Watts>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"executed_policy": <Policy Executed by the Controller>,
"capacity_W": <سعة الطاقة الشمسية بالواط>,
"today_energy_Wh": <الطاقة المُنتجة اليوم بالساعات الواطية>.
"nr_devices": <عدد الأجهزة الشمسية المُتحكم فيها المثبتة>
},
"heat_pump": {
"executed_policy": <السياسة المُنفذة بواسطة المتحكم>,
"operation_modes": <أوضاع تشغيل مضخة الحرارة>,
"executed_power_W": <قيمة الطاقة المحددة المُرسلة إلى الأجهزة بالواط>,
"nr_devices": <عدد الأجهزة المُتحكم فيها لمضخة الحرارة المثبتة>
},
"switched_load": {
"executed_policy": <السياسة المُنفذة بواسطة المتحكم>,
"devices_on": <عدد الأجهزة المُشغلة>,
"devices_off": <عدد الأجهزة المُطفأة>,
"executed_power_W": <قيمة الطاقة المحددة المُرسلة إلى الأجهزة بالواط>,
"nr_devices": <عدد الأجهزة المُتحكم فيها المحملة بالتبديل المثبتة>
}
},
"response_code": <رمز الاستجابة>
},
"fields": {},
"requestTime": "<طابع زمني يونكس>",
"time": "<طابع زمني يونكس>",
"siteNodeId": "<رقم الموقع الخاص بالتحكم>_site_0"
}
### وصف الحقول
- time (Integer): طابع زمني يونكس يشير إلى الوقت الذي تم فيه إرسال رسالة التعليقات.
- fields (Object):
- state (Object):
- vpp_id (String): معرّف محطة الطاقة الافتراضية المرتبطة بهذا الجهاز.
- grid (Object):
- active_power_W (Float): تمثل الطاقة النشطة الحالية على الشبكة بالواط.
- today_imported_energy_Wh (Float): إجمالي الطاقة المستقدمة من الشبكة اليوم بالساعات الواطية. ملاحظة: اليوم مُعطى بتوقيت UTC.
- today_exported_energy_Wh (Float): إجمالي الطاقة التي تم حقنها مرة أخرى إلى الشبكة اليوم بالساعات الواطية. ملاحظة: اليوم مُعطى بتوقيت UTC.
- import_limit_W (Float): حد استيراد الشبكة بالواط،
- export_limit_W (Float): حد تصدير الشبكة بالواط،
- storage (Object):
- energy_stored_Wh (Float): الكمية الحالية من الطاقة المخزنة بالساعات الواطية.
- energy_capacity_Wh (Float): إجمالي سعة نظام التخزين بالساعات الواطية.
- mean_soc_perc (Float): حالة الشحن كنسبة مئوية. هذا هو المتوسط الموزون بين جميع البطاريات المتصلة. (عند توصيل عدة بطاريات: على سبيل المثال، البطارية 'a' لديها سعة طاقة قدرها 10 كيلو واط ساعة وحالة شحن 20٪؛ البطارية 'b' لديها سعة طاقة قدرها 20 كيلو واط ساعة وحالة شحن 50٪، إذن mean_soc_perc هو 40٪)
- active_power_W (Float): الطاقة النشطة الحالية لنظام التخزين بالواط، تظهر معدل الشحن أو التفريغ.
- max_charge_power_W (Float): الحد الأقصى للطاقة التي يمكن أن يتم شحن التخزين بها.
- max_discharge_power_W (Float): الحد الأقصى للطاقة التي يمكن أن يتم تفريغها من التخزين.
- executed_power_W (Float): مجموع الطاقة الكلية المطلوبة للتفريغ من أصول التخزين، المُرسلة بواسطة خوارزمية التحكم لدينا. ينطبق فقط إذا كانت سياسة 'follow_setpoint' نشطة.
- executed_policy (Str): السياسات التي تم تطبيقها على العناصر القابلة للتحكم.
- today_charged_Wh (Float): إجمالي الطاقة التي تم شحنها في الأصول القابلة للتحكم من البطارية اليوم. ملاحظة: اليوم مُعطى بتوقيت UTC.
- today_discharged_Wh (Float): إجمالي الطاقة التي تم تفريغها من الأصول القابلة للتحكم من البطارية اليوم. ملاحظة: اليوم مُعطى بتوقيت UTC.
- nr_devices (Int): عدد أصول البطارية القابلة للتحكم.
- solar (Object):
- active_power_W (Float): الطاقة النشطة الحالية المُنتجة بواسطة الألواح الشمسية بالواط.
- capacity_W (Float): إجمالي سعة نظام توليد الطاقة الشمسية بالواط.
- executed_power_W (Float): مجموع الطاقة الكلية المطلوبة من الأصول الشمسية، المُرسلة بواسطة خوارزمية التحكم لدينا. ينطبق فقط إذا كانت سياسة 'follow_setpoint' نشطة.
- executed_policy (Str): السياسات التي تم تطبيقها على العناصر القابلة للتحكم.
- today_energy_Wh (Float): إجمالي الطاقة المُنتجة من الأصول الشمسية القابلة للتحكم اليوم. ملاحظة: اليوم مُعطى بتوقيت UTC.
- nr_devices (Int): عدد الأصول الشمسية القابلة للتحكم.
- heat_pump (Object):
- executed_policy (Str): السياسات التي تم تطبيقها على العناصر القابلة للتحكم.
- operation_modes (Str): وضع مضخة الحرارة (وضع الحظر، وضع التعزيز، وضع التحكم الذاتي)
- executed_power_W (Float): الطاقة المتوقعة التي يتم استخدامها حالياً.
- nr_devices (Int): عدد مضخات الحرارة القابلة للتحكم.
- switched_load (Object):
- executed_policy (Str): السياسات التي تم تطبيقها على العناصر القابلة للتحكم.
- devices_on (Int): عدد الأجهزة المُشغلة.
- devices_off (Int): عدد الأجهزة المُطفأة.
- executed_power_W (Float): الطاقة التي يتم استخدامها حالياً (إذا كانت متاحة).
- nr_devices (Int): عدد الأحمال المُتحكم فيها المفتوحة/المغلقة.
- nodeId (Object):
- إذا تم تضمين nodeId في الأمر، ستحتوي التعليقات على الحالة المقابلة للجهاز.
- response_code (Int):
- يشير إلى حالة العملية. رمز الاستجابة 0 يعني عادة النجاح، بينما قد تشير القيم الأخرى إلى أنواع مختلفة من الأخطاء أو معلومات الحالة (ينبغي أن يتم تفصيلها في مرجع منفصل).

### نموذج حمولة التعليقات
إليك نموذج لرسالة تعليقات تتبع أمراً لتحديد نقاط الطاقة المختلفة:

<ClickableImage src="/img/generic/mqtt-example-feedback.png" alt="صورة 1" maxWidth="450px" />

تظهر هذه التعليقات الحالة التشغيلية الحالية للنظام بعد تنفيذ نقاط الإعداد، مما يدل على الآثار على توليد الطاقة الشمسية، التخزين، والتفاعل العام مع الشبكة.

## إصدارات MQTT المدعومة وسلوك المواضيع غير المصرح بها
عند استخدام MQTT، من المهم مراعاة الاختلافات في المواصفات بين الإصدارات 3.1، 3.1.1، و5.0، لاسيما فيما يتعلق بسلوك الوسيط عند نشر العملاء إلى مواضيع غير مصرح بها.

وفقًا لمواصفة MQTT 3.1.1 (انظر مواصفة OASIS MQTT 3.1.1، القسم MQTT-3.3.5-2)، يجب أن يقوم الوسيط بإنهاء الاتصال بمجرد أن يرسل العميل PUBLISH إلى موضوع ليس لديه إذن به. يمكن أن يؤدي هذا السلوك إلى انقطاعات غير متوقعة بالنسبة للعملاء الذين يحاولون النشر إلى مواضيع غير مصممة بشكل صحيح أو غير مصرح بها.

في MQTT 3.1، هذا المتطلب غير موجود. عندما ينشر عميل إلى موضوع غير مصرح به تحت هذا الإصدار، عادة ما يتجاهل الوسيط الرسالة (إسقاط صامت) دون إنهاء الاتصال. وهذا يجعل MQTT 3.1 في بعض الحالات أكثر ملاءمة عندما تكون القوة ضد أخطاء التكوين أو الأذونات المفقودة مؤقتًا أكثر أهمية من فرض الأمن الصارم.

على الرغم من أن MQTT 5.0 يقدم القدرة على العمل مع رموز الأسباب (مثل PUBACK مع سبب الرفض)، إلا أن هذا يتطلب دعمًا من كلا الجانبين، العميل والخادم. لذلك، فإن الترحيل إلى MQTT 5.0 يتطلب جهد تنفيذ إضافي.

__عواقب تجاهل التوافق:__
إذا قام عميل بالاتصال باستخدام MQTT 3.1.1 وحاول نشر رسائل إلى مواضيع غير مصرح بها، فسوف يقوم الوسيط بإنهاء الجلسة بشكل مفاجئ. قد يؤدي ذلك إلى عدم الاستقرار، أو فقدان الاتصال، أو زيادة الحمل بسبب محاولات إعادة الاتصال المتكررة.

__النهج الموصى به:__
لأنظمة قد يحاول فيها العملاء (بشكل مؤقت) نشر رسائل إلى مواضيع غير مصرح بها، أو حيث لا يتم تنفيذ إدارة الأخطاء بشكل صارم، نوصي باستخدام MQTT 3.1. هذا يضمن اتصالات أكثر استقرارًا ويجنب الانفصالات غير المقصودة أثناء وقت التشغيل.